package com.ruoyi.common.modbus.message;

import com.ruoyi.common.modbus.data.MiiData;

/**
 *  响应指令格式
 *  hm
 */
public interface MiiHmOutMessage {

    /**
     * 数据长度.  <br>
     * <table border="1" >
     * <tr> <th>DEVICE_SIZE</th> <th>FUNCODE_SIZE</th> <th>DATA_SIZE</th> <th>DATA_SIZE</th> </tr>
     * <tr> <th>  设备地址  </th>  <th>    功能码   </th> <th> 数据长度  </th> <th> 设备地址 </th> </tr>
     * <tr> <th>CHECKCODE_SIZE</th>  </tr>
     * <tr> <th>校验位</th>  </tr>
     * </table><br>
     */
    int DEVICE_SIZE = 1, FUNCODE_SIZE = 1,START_SIZE = 2, DATA_LENGTH_SIZE = 2,  CHECKCODE_SIZE = 2;


    /**
     * 数据下标.  <br>
     * <table border="1" >
     * <tr> <th>DEVICE_INDEX</th> <th>DATA_LINDEX</th>  </tr>
     * <tr> <th>设备地址索引</th> <th>数据长度开始位</th>  </tr>
     * </table><br>
     */
    int DEVICE_INDEX = 0, FUNCODE_INDEX = 1, START_INDEX = 2, DATA_LENGTH_INDEX = 4, DATA_INDEX = 6;

    /**
     * 返回设备组编码.
     * @return 设备组编码
     */
    String deviceGroup();

    /**
     * 返回消息的数据对象的字节长度.
     * @return 数据对象的字节长度
     */
    int length();

    /**
     * 返回消息的数据对象.
     * @return 数据对象
     */
    MiiData data();

    /**
     * 返回消息的字节数组.
     * @return 字节数组
     */
    byte[] toBytes();
}
